<?php

namespace application\service;

use application\model\SiteModel;
use application\entity\form\SiteForm;
use application\service\BaseService;
use application\entity\input\SiteSearch;
use core\entity\Criteria;
use core\entity\Page;
use application\util\TextUtil;
use application\entity\Response;
use application\entity\db\Site;

class SiteService extends BaseService {

    private $siteModel;

    public function __construct() {
        $this->siteModel = new SiteModel();
    }

    /**
     * Search có phân trang
     * @param \application\entity\input\SiteSearch $search
     * @return type
     */
    public function search(SiteSearch $search) {
        $cri = new Criteria();

        if (TextUtil::getVariable($search, 'domain', null) != null) {
            $cri->andKey("domain")->regex("%" . $search->domain . "%");
        }
        if (TextUtil::getVariable($search, 'email', null) != null) {
            $cri->andKey("email")->is($search->email);
        }
        if (TextUtil::getVariable($search, 'nofollow', 0) > 0) {
            $cri->andKey("nofollow")->is($search->nofollow == 1);
        }
        $page = new Page();
        $page->pageIndex($search->pageIndex, $search->pageSize);
        $dataPage = $this->siteModel->iSearch($cri, $page);
        return $dataPage;
    }

    /**
     * Thêm mới site
     * @param \application\entity\form\SiteForm $form
     * @return \application\entity\Response
     */
    public function add(SiteForm $form) {
        $form->id = null;
        $error = [];
        if (TextUtil::getVariable($form, 'domain', null) == null) {
            $error["domain"] = "Tên miền không được để trống";
        }
        if (TextUtil::getVariable($form, 'email', null) == null) {
            $error["email"] = "Địa chỉ email admin chưa được nhập";
        }
        if (TextUtil::getVariable($form, 'nofollow', 0) == 0) {
            $form->nofollow = false;
        }
        if (!empty($error)) {
            $site = new Site();
            $site->domain = $form->domain;
            $site->email = $form->email;
            $site->nofollow = $form->nofollow;
            $this->siteModel->isave($site);
            $site->id = $this->siteModel->getId();
            return new Response(true, "Thêm mới website thành công", $site);
        }
        return new Response(false, "Thêm mới website không thành công, dữ liệu không chính xác", $error);
    }

    /**
     * Xóa site theo id
     * @param type $id
     * @return \application\entity\Response
     */
    public function remove($id) {
        $site = $this->siteModel->findById($id);
        if ($site->id == null) {
            return new Response(false, "Website không tồn tại trên hệ thống");
        }
        $this->siteModel->iremove($id);
        return new Response(true, "Xóa thành công website " . $site->domain . " khỏi hệ thống");
    }

    /**
     * Thay đổi trạng thái  nofollow theo id
     * @param type $id
     * @return \application\entity\Response
     */
    public function changeNofollow($id) {
        if($id == null) {
            return new Response(false, "Mã website chưa được nhập");
        }
        $site = $this->siteModel->findById($id);
        if ($site->id == null) {
            return new Response(false, "Website không tồn tại trên hệ thống");
        } 
        $site->nofollow = !$site->nofollow;
        $this->siteModel->isave($site);
        $site->id = $id;
        return new Response(true, "website " . $site->domain . ' chuyển sang ' . ($site->nofollow ? ' nofollow' : 'dofollow'), $site);
    }

}
